package com.example.shinelon.gobang.MyActivity;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;

import com.baidu.location.BDLocation;
import com.baidu.location.BDLocationListener;
import com.baidu.location.LocationClient;
import com.baidu.location.LocationClientOption;
import com.baidu.mapapi.SDKInitializer;
import com.baidu.mapapi.map.BaiduMap;
import com.baidu.mapapi.map.BitmapDescriptor;
import com.baidu.mapapi.map.BitmapDescriptorFactory;
import com.baidu.mapapi.map.MapStatusUpdate;
import com.baidu.mapapi.map.MapStatusUpdateFactory;
import com.baidu.mapapi.map.MapView;
import com.baidu.mapapi.map.MyLocationConfiguration;
import com.baidu.mapapi.map.MyLocationData;
import com.baidu.mapapi.model.LatLng;
import com.example.shinelon.gobang.R;

public class Map extends AppCompatActivity implements BDLocationListener, View.OnClickListener {
    private MapView mMap;
    private BaiduMap mBaiduMap;
    private Button mButBack;
    private BitmapDescriptor mIconLocation;
    private LocationClient mLocationClient;
    private boolean isFarstIn=true;
    private LatLng mMyLatLng;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        SDKInitializer.initialize(getApplicationContext());
        setContentView(R.layout.activity_map);
        initView();
        init();
        initEvent();
    }

    private void init() {
        MapStatusUpdate msu= MapStatusUpdateFactory.zoomTo(15.0f);

        mBaiduMap.setMapStatus(msu);
        //声明LocationClient类
        mLocationClient = new LocationClient(getApplicationContext());
        initLocation();

    }
    private void initLocation() {
//        mIconLocation= BitmapDescriptorFactory.fromResource(R.mipmap.navi_map_gps_locked);
//        mLocationClient = new LocationClient(getApplicationContext());     //声明LocationClient类
//        mLocationClient.registerLocationListener(this);    //注册监听函数
        LocationClientOption option = new LocationClientOption();
        option.setCoorType("bd09ll");//可选，默认gcj02，设置返回的定位结果坐标系
//        option.setIsNeedAddress(true);
//        option.setOpenGps(true);
//        option.setScanSpan(1000);
        option.setLocationMode(LocationClientOption.LocationMode.Hight_Accuracy);
        //可选，默认高精度，设置定位模式，高精度，低功耗，仅设备
        int span = 1000;
        option.setScanSpan(span);//可选，默认0，即仅定位一次，设置发起定位请求的间隔需要大于等于1000ms才是有效的
        option.setIsNeedAddress(true);//可选，设置是否需要地址信息，默认不需要
        option.setOpenGps(true);//可选，默认false,设置是否使用gps
        option.setLocationNotify(true);//可选，默认false，设置是否当gps有效时按照1S1次频率输出GPS结果
        option.setIsNeedLocationDescribe(true);//可选，默认false，设置是否需要位置语义化结果，可以在BDLocation.getLocationDescribe里得到，结果类似于“在北京天安门附近”
        option.setIsNeedLocationPoiList(true);//可选，默认false，设置是否需要POI结果，可以在BDLocation.getPoiList里得到
        option.setIgnoreKillProcess(false);//可选，默认true，定位SDK内部是一个SERVICE，并放到了独立进程，设置是否在stop的时候杀死这个进程，默认不杀死
        option.SetIgnoreCacheException(false);//可选，默认false，设置是否收集CRASH信息，默认收集
        option.setEnableSimulateGps(false);//可选，默认false，设置是否需要过滤gps仿真结果，默认需要
        mLocationClient.setLocOption(option);
    }

    private void initView() {
        mMap= (MapView) findViewById(R.id.map_baidu);
        assert mMap != null;
        mBaiduMap=mMap.getMap();
        mIconLocation= BitmapDescriptorFactory.fromResource(R.mipmap.navi_map_gps_locked);
        mButBack= (Button) findViewById(R.id.but_back);
    }

    private void initEvent() {
        //注册监听函数
        mLocationClient.registerLocationListener(this);
        mButBack.setOnClickListener(this);
    }
    @Override
    protected void onStart() {
        super.onStart();
        mBaiduMap.setMyLocationEnabled(true);
        if (!mLocationClient.isStarted())
            mLocationClient.start();
    }
    @Override
    protected void onPause() {
        super.onPause();
        mMap.onPause();
    }

    @Override
    protected void onResume() {
        super.onResume();
        mMap.onResume();
    }
    @Override
    protected void onStop() {
        super.onStop();
        mBaiduMap.setMyLocationEnabled(false);
        mLocationClient.stop();
    }
    @Override
    protected void onDestroy() {
        super.onDestroy();
        mMap.onDestroy();
    }

    @Override
    public void onReceiveLocation(BDLocation bdLocation) {
        MyLocationData data = new MyLocationData.Builder()
                .accuracy(bdLocation.getRadius())//精度
                .latitude(bdLocation.getLatitude())//纬度
                .longitude(bdLocation.getLongitude())//经度
                .build();
        mBaiduMap.setMyLocationData(data);
        MyLocationConfiguration configuration = new MyLocationConfiguration(
                MyLocationConfiguration.LocationMode.NORMAL,
                true,
                mIconLocation);
        mBaiduMap.setMyLocationConfigeration(configuration);

        if (isFarstIn) {
            mMyLatLng = new LatLng(bdLocation.getLatitude(), bdLocation.getLongitude());
            myAddr(mMyLatLng);
            Toast.makeText(this, bdLocation.getAddrStr(), Toast.LENGTH_SHORT).show();
            isFarstIn = false;
        }
    }

    private void myAddr(LatLng myLatLng) {
        MapStatusUpdate msu = MapStatusUpdateFactory.newLatLng(myLatLng);
        mBaiduMap.animateMapStatus(msu);
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()){
            case R.id.but_back:
                myAddr(mMyLatLng);
                break;
        }
    }
}
